package com.ddwanglife.juc;

import java.util.concurrent.TimeUnit;

class Phone{
    public static synchronized void sendEmail()throws Exception{
        TimeUnit.SECONDS.sleep(4);
        System.out.println("********sendEmail");
    }
    public synchronized void sendSMS()throws Exception{
        System.out.println("********sendSMS");
    }
}

/**
 * 8 Lock
 * 1，标准访问：先打印邮件还是短信 SMS 和 Email谁先被调度，看CPU资源调度
 * 2，暂停4秒钟在邮件方法，请问先打印邮件还是短信
 *  先打印邮件，短信会等着邮件发送执行完再运行
 * 3，新增普通sayHello方法，请问先打印邮件还是hello
 *  先执行sayHello,4秒过后再发送邮件
 * 4，两部手机 先打印邮件还是短信
 *  phoneEx.sendSMS 先打印短信，然后再打印phone.sendEmail
 * 5,两个静态同步方法，同一部手机，请问先打印邮件还是短信
 * 先打印邮件，短信会等着邮件发送执行完再运行
 * 6,两个静态同步方法，两部手机，请问先打印邮件还是短信
 * 先打印邮件，短信会等着邮件发送执行完再运行
 * 7,一个静态同步方法，一个普通同步方法，同一步手机，请问先打印邮件还是短信
 * phoneEx.sendSMS 先打印短信，然后再打印phone.sendEmail
 * 8,一个静态同步方法，一个普通同步方法，两部手机，请问先打印邮件还是短信
 * phoneEx.sendSMS 先打印短信，然后再打印phone.sendEmail
 */
public class LockEightDemo {
    public static void main(String[] args) throws InterruptedException {
        Phone phone = new Phone();
        Phone phoneEx = new Phone();
        new Thread(()->{
            try{
                phone.sendEmail();
            }catch (Exception e){
                e.printStackTrace();
            }
        },"A").start();
        Thread.sleep(100);//为了让方法顺序执行，故意让main线程睡一会
        new Thread(()->{
            try{
//                phone.sendSMS();
                phoneEx.sendSMS();
            }catch (Exception e){
                e.printStackTrace();
            }
        },"B").start();
    }
}
